package com.ai.service.made;

import com.ai.common.CommonResponse;

import com.ai.entity.alarm.*;
import com.ai.model.dto.RecordInfoDto;
import com.ai.model.made.RegionalViolationDto;
import com.ai.model.made.TopFiveViolationsDto;
import com.ai.model.param.AlgorithmAlarmParam;
import com.ai.model.vo.RecordNumAndDetail;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author Mr.Chen
 * @since 2020-06-19
 */
public interface RecordAlarmService extends IService<RecordAlarmPO> {


    /**
     * 算法提交识别警告----弃用
     *
     * @return
     */
    CommonResponse addAlarm(List<AlgorithmAlarmBO> algorithmAlarmBO);

    /**
     * 持久化算法发送的告警记录
     * @param algorithmAlarmParams 算法入参
     * @return
     */
    CommonResponse addWarningRecord(AlgorithmAlarmParam algorithmAlarmParams);

    /**
     * 识别警告列表
     *
     * @return
     */
    CommonResponse selectByPage(RecordAlarmPage page);

    /**
     * 是否误报
     *
     * @param recordAlarmBO
     * @return
     */
    CommonResponse signError(RecordAlarmBO recordAlarmBO);

    List<RecordAlarmPO> getRecordByCameraCodeAndFunType(ArrayList<String> cameraCode, String funType);

    List<TopFiveViolationsDto> topFiveViolations();


    List<RegionalViolationDto> regionalViolation();

    CommonResponse latestRecord();

    /**
     * 获取视频回放地址
     * @param recordId
     * @return
     */
    CommonResponse getCameraPlaybackUrl(String recordId);


    /**
     * 批量审批图片是否为误报
     * @param recordAlarmBOList dto
     * @return
     */
    CommonResponse batchSignError(List<RecordAlarmBO> recordAlarmBOList);

    /**
     * 根据摄像头code统计告警数量
     * @param manageCameraCode 摄像头code
     * @return 告警数量
     */
    Integer countAlarmByCameraCodes(List<String> manageCameraCode);

    /**
     * 统计各个功能的告警数量
     * @return 各个功能及对应的告警数量
     */
    List<FunctionRecordNum> statisticsAlarmByType();

    /**
     * 获取当天的告警数量
     * @return
     */
    Integer getTodayRecordNum();

    /**
     * 获取本周的告警数量
     * @return
     */
    Integer getWeekRecordNum();

    /**
     * 导出告警信息
     */
    void exportRecordExcel();

    /**
     * 获取功能告警详细信息
     * @return
     */
    List<RecordNumAndDetail.RecordDetail> getTodayRecordNumAndDetail(RecordInfoDto recordInfoDto);

    /**
     * 功能告警统计
     * @param recordInfoDto
     * @return
     */
    List<RecordNumAndDetail.RecordDetail> getWeekRecordNumAndDetail(RecordInfoDto recordInfoDto);

    /**
     * 统计各类型功能本月告警数量
     * @param recordInfoDto 查询矿区
     * @return
     */
    Map<String, List<String>>  getMonthRecordNumAndDetail(RecordInfoDto recordInfoDto);

    /**
     * 告警表格导出
     * @param page 条件
     * @param response 返回二进制响应文件，供前端下载
     */
    void alarmExportExel(RecordAlarmPage page, HttpServletResponse response);

    /**
     * 单轨吊检修告警表格导出
     * @param page 参数
     * @param response 返回二进制响应文件，供前端下载
     */
    void coalMaintenanceAlarmExportExel(RecordAlarmPage page, HttpServletResponse response);

    /**
     * 获取视频回放下载地址
     * @param recordId
     * @return
     */
    CommonResponse getCameraPlaybackDownloadUrl(String recordId);
}
